/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package datosServer;

/**
 *
 * @author mimi
 */

/*import datosServer.ListaUsuario;
import datosServer.Usuario;*/
import java.io.*;
import java.util.*;
import org.jdom.*;
import org.jdom.input.*;
import org.jdom.output.*;

/**
 *
 * @author Daniela
 */
public class Archivo {

    //private static String rutaArchivo = "/home/mimi/Desktop/ProyectoiDominoV3/ServerV2/src/datosServer/DatosUsuarios.xml";
    //private static String rutaArchivoPiezas ="/home/mimi/Desktop/ProyectoiDominoV3/ServerV2/src/datosServer/DatosPiezas.xml";
    private static String rutaArchivo = "C:/PROYECTOPERFECTO/mimi/ServerV22/src/datosServer/DatosUsuarios.xml";
    private static String rutaArchivoPiezas ="C:/PROYECTOPERFECTO/mimi/ServerV22/src/datosServer/DatosPiezas.xml";

     public static boolean leerArchivoXMLUsuarios(ListaUsuario listaDeUsuarios)
    {
        try
        {
            SAXBuilder builder = new SAXBuilder();

            /* Se crea un documento nuevo con el nombre del archivo */
            Document doc = builder.build(rutaArchivo);

            /* Se obtiene la raíz del archivo (la etiqueta inicial) */
            Element raiz = doc.getRootElement();
            if (raiz == null)
                return false;
            else
            {
                /* Se puede obtener el atributo de la raíz (de la etiqueta) */
                System.out.println(raiz.getAttributeValue("tipo"));

                /* Se obtienen todos los hijos cuya etiqueta esa "usuario"  */
                /* y se asignan esos hijos a un List                        */
                List listaUsuarios = raiz.getChildren("usuario");

                System.out.println("Formada por:" + listaUsuarios.size() + " usuarios");
                System.out.println("------------------");

                 /* Se genera un iterador para recorrer el List que se generó */
                Iterator i = listaUsuarios.iterator();

                /* Se recorre el List */
                while (i.hasNext())
                {
                    /* Se obtiene cada uno y se asigna a un objeto de tipo Element */
                    Element e = (Element) i.next();


                    Element nombre = e.getChild("nombre");
                    Element apellido = e.getChild("apellido");
                    Element nickname = e.getChild("nickname");
                    Element clave = e.getChild("clave");
                    Element IDavatar = e.getChild("IDavatar");
                    Element pathAvatar = e.getChild("pathAvatar");
                    Element fecha = e.getChild("fecha");
                    Element dia = e.getChild("dia");
                    Element mes = e.getChild("mes");
                    Element año = e.getChild("año");

                    int diaI,mesI,añoI,IDavatarI;
                    //Jcalendar2 fechaS = new Jcalendar2();
                    String diaS,mesS,añoS,IDavatarS,pathAvatarS;
                    diaS = mesS = añoS = IDavatarS = pathAvatarS = "";

                    IDavatarS = IDavatar.getText();
                    pathAvatarS = pathAvatar.getText();
                    diaS = dia.getText();
                    mesS = mes.getText();
                    añoS = año.getText();

                     IDavatarI = Integer.parseInt(IDavatarS);

                    Avatar avatar = new Avatar();
                    avatar.setID(IDavatarI);
                    avatar.setPathAvatar(pathAvatarS);

                    diaI = Integer.parseInt(diaS);
                    mesI = Integer.parseInt(mesS);
                    añoI = Integer.parseInt(añoS);
                    //fechaS = new Jcalendar2(diaI,mesI,añoI);

                    /* Se crea un nodo nuevo con la información y se agrega a la lista de usuarios */
                    Usuario elNodo = new Usuario(nickname.getText(),clave.getText(),nombre.getText(),apellido.getText(),diaI,mesI,añoI,avatar);
                    listaDeUsuarios.agregarElemento(elNodo);
                }
            }
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
        return true;
    }


     public static void guardarArchivoXMLUsuarios(ListaUsuario listaDeUsuarios)
     {
        Usuario nodoAuxiliar;

        /* Se crea una raiz de la estructura */
        Element root = new Element("usuarios");

        /* Es posible agregar atributos a la estructura inicial */
        root.setAttribute("tipo","lista de usuarios");

        Iterator iterador = listaDeUsuarios.getIterator();

        while (iterador.hasNext())
        {
            /* Se crea la etiqueta "usuario" */
            Element usuarios = new Element("usuario");

            nodoAuxiliar = (Usuario) iterador.next();

            /* Se crean las etiquetas nombre, apellido y cargo */
            Element nombre = new Element("nombre");
            Element apellido = new Element("apellido");
            Element nickname = new Element("nickname");
            Element clave = new Element("clave");
            Element IDavatar = new Element("IDavatar");
            Element pathAvatar = new Element("pathAvatar");
            Element dia = new Element("dia");
            Element mes  = new Element("mes");
            Element año = new Element("año");
            //Element fecha = new Element("fecha");

            String diaS,mesS,añoS, fechaS,IDavatarS,pathAvatarS;
            diaS = mesS = añoS = fechaS = IDavatarS = pathAvatarS = "";
            String [] arrFecha = nodoAuxiliar.getFechaNacimiento().split("/");
            diaS=arrFecha[0];   //System.out.println("disS: "+diaS);
            mesS=arrFecha[1];   //System.out.println("mesS: "+mesS);
            añoS=arrFecha[2];   //System.out.println("añoS: "+añoS);

          //  fechaS = String.valueOf(nodoAuxiliar.getFechaNac());
           /* diaS = String.valueOf(nodoAuxiliar.getDia());
            mesS = String.valueOf(nodoAuxiliar.getMes());
            añoS = String.valueOf(nodoAuxiliar.getAño());*/

            IDavatarS = String.valueOf(nodoAuxiliar.getAvatar().getID());
            pathAvatarS = nodoAuxiliar.getAvatar().getPathAvatar();

            /* Se inicializa cada etiqueta con sus valores de la lista */
            nombre.setText(nodoAuxiliar.getNombre());
            apellido.setText(nodoAuxiliar.getApellido());
            nickname.setText(nodoAuxiliar.getNickname());
            clave.setText(nodoAuxiliar.getClave());

            IDavatar.setText(IDavatarS);
            pathAvatar.setText(pathAvatarS);

            dia.setText(diaS);
            mes.setText(mesS);
            año.setText(añoS);
           // fecha.setText(fechaS);
            /* Se añaden las etiquetas a la etiqueta principal (usuario)    */
            /* estableciendo que un usuario tiene nombre, apellido y cargo  */
            usuarios.addContent(nombre);
            usuarios.addContent(apellido);
            usuarios.addContent(nickname);
            usuarios.addContent(clave);
            
            usuarios.addContent(IDavatar);
            usuarios.addContent(pathAvatar);

         //   usuarios.addContent(fecha);
            usuarios.addContent(dia);
            usuarios.addContent(mes);
            usuarios.addContent(año);

            /* Se añade el nuevo usuario a la estructura XML */
            root.addContent(usuarios);
         }

        /* Se crea un documento nuevo */
        Document doc = new Document(root);

        try
        {
            /* Se genera un flujo de salida de datos XML */
            XMLOutputter out = new XMLOutputter();

            /* Se asocia el flujo de salida con el archivo donde se guardaran los datos */
            FileOutputStream file = new FileOutputStream(rutaArchivo);

            /* Se manda el documento generado hacia el archivo XML */
            out.output(doc,file);

            /* Se limpia el buffer ocupado por el objeto file y se manda a cerrar el archivo */
            file.flush();
            file.close();

            /* En este caso se manda a imprimir el archivo por la consola   */
            /* ESTE PROCESO NO ES OBLIGATORIO PARA PROCESAR EL XML          */
            out.output(doc,System.out);
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
     }



     public static void CargarXMLPiezas(ListaPieza piezas)
     {
        try
        {
            SAXBuilder builder = new SAXBuilder();

            /* Se crea un documento nuevo con el nombre del archivo */
            Document doc = builder.build(rutaArchivoPiezas);

            /* Se obtiene la raíz del archivo (la etiqueta inicial) */
            Element raiz = doc.getRootElement();

            List listaPiezas = raiz.getChildren("pieza");

            /* Se genera un iterador para recorrer el List que se generó */
            Iterator i = listaPiezas.iterator();

            /* Se recorre el List */
            while (i.hasNext())
            {
                /* Se obtiene cada uno y se asigna a un objeto de tipo Element */
                Element e = (Element) i.next();

                Element ID = e.getChild("ID");
                Element valSuperior = e.getChild("valSuperior");
                Element valInferior = e.getChild("valInferior");
                Element imagenA = e.getChild("imagenA");
                Element imagenB = e.getChild("imagenB");
                Element imagenI = e.getChild("imagenI");
                Element imagenD = e.getChild("imagenD");


                Pieza laPieza = new Pieza(Integer.parseInt(ID.getText()),Integer.parseInt(valSuperior.getText()),Integer.parseInt(valInferior.getText()),imagenA.getText(), imagenB.getText(),imagenI.getText(), imagenD.getText());
                piezas.agregarElemento(laPieza);
            }
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
     }



      public static void guardarXMLPiezas(ListaPieza piezas)
    {
        Pieza nodoAuxiliar;

        /* Se crea una raiz de la estructura */
        Element root = new Element("piezas");

        /* Es posible agregar atributos a la estructura inicial */
        root.setAttribute("tipo","lista de piezas");

        Iterator iterador = piezas.getIterator();

        while (iterador.hasNext())
        {
            /* Se crea la etiqueta "usuario" */
            Element pieza = new Element("pieza");

            nodoAuxiliar = (Pieza) iterador.next();

            /* Se crean las etiquetas nombre, apellido y cargo */
            Element ID = new Element("ID");
            Element valSuperior = new Element("valSuperior");
            Element valInferior = new Element("valInferior");
            Element imagenA = new Element("imagenA");
            Element imagenB = new Element("imagenB");
            Element imagenI = new Element("imagenI");
            Element imagenD = new Element("imagenD");

            /* Se inicializa cada etiqueta con sus valores de la lista */
            ID.setText(Integer.toString(nodoAuxiliar.getID()));
            valSuperior.setText(Integer.toString(nodoAuxiliar.getValSuperior()));
            valInferior.setText(Integer.toString(nodoAuxiliar.getValInferior()));
            /*imagenA.setText(nodoAuxiliar.getImagenAsociadaA());
            imagenB.setText(nodoAuxiliar.getImagenAsociadaB());
            imagenI.setText(nodoAuxiliar.getImagenAsociadaI());
            imagenD.setText(nodoAuxiliar.getImagenAsociadaD());
            */
            pieza.addContent(ID);
            pieza.addContent(valSuperior);
            pieza.addContent(valInferior);
           /* pieza.addContent(imagenA);
            pieza.addContent(imagenB);
            pieza.addContent(imagenI);
            pieza.addContent(imagenD);
            */
            root.addContent(pieza);
        }

        /* Se crea un documento nuevo */
        Document doc = new Document(root);

        try
        {
            /* Se genera un flujo de salida de datos XML */
            XMLOutputter out = new XMLOutputter();

            /* Se asocia el flujo de salida con el archivo donde se guardaran los datos */
            FileOutputStream file = new FileOutputStream(rutaArchivoPiezas);

            /* Se manda el documento generado hacia el archivo XML */
            out.output(doc,file);

            /* Se limpia el buffer ocupado por el objeto file y se manda a cerrar el archivo */
            file.flush();
            file.close();
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }
}
